/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.vos;

import java.util.Calendar;
import java.util.HashMap;

/**
 *
 * @author IAC
 */
public class ConversionNombre {

    private int numero;
    private char abeceda[] = {'.', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'Ñ', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'};
    private HashMap<String, SignoZodiacal> signos;

    public int getNumero() {
        return numero;
    }

    public void setNumero(int numero) {
        this.numero = numero;
    }

    /**
     * suma las posiciones del nombre que entra como parámetro.
     *
     * @param nombre
     */
    public void descomponer(String nombre) {
        nombre=nombre.toUpperCase();
        int counter = 0;
        for (int i = 0; i < nombre.length(); i++) {
            counter += buscarVlrLetra(nombre.charAt(i));
        }
        
        this.numero = sumarDigitos(counter);
        
        while(this.numero>9){
            this.numero=sumarDigitos(this.numero);
        }
    }

    /**
     * Busca la posición de la Letra que entra como parámetro y retorna la
     * posicion.
     *
     * @param letra
     * @return
     */
    public int buscarVlrLetra(char letra) {
        int posicion = 0;
        for (int i = 1; i < this.abeceda.length; i++) {
            if (this.abeceda[i] == letra) {
                posicion = i;
                break;
            }
        }
        return posicion;
    }

    /**
     * Método recursivo usado para sumar los digitos entre si del número
     * generado de conversion de nombre a número.
     *
     * @param numero
     * @return
     */
    public int sumarDigitos(int numero) {
        if (numero ==0) {
            return 0;
        } else {
            return  sumarDigitos(numero / 10)+ (numero % 10) ;
        }
    }
    
    public void crearSignosZodiaco() {
        this.signos= new HashMap<String, SignoZodiacal>();
        SignoZodiacal capricornio = new SignoZodiacal("CAPRICORNIO",
                "Se enfermó por resolver problemas solo, sin ayuda de nadie. Sus fines de semana se acabaron; mientras sus amigos se dedican al ocio usted sigue con la mente invadida por el cúmulo de problemas, una torre de piso a techo. Es el momento de reconocer que tiene parte en la avalancha: creyó a fe ciega el cuento de que es el único a quien se puede recurrir, dadas su lealtad y dedicación. Y no pensó que a pesar de ser cierto, esta es la estrategia de los descarados que trasladan su responsabilidad. Velas rojas, muchísimas velas rojas.");
        this.signos.put("CAPRICORNIO", capricornio);

        SignoZodiacal acuario = new SignoZodiacal("ACUARIO",
                "Se ha caracterizado por ser una persona prudente que no da pasos en falso, no toma decisiones a la ligera y considera a los demás, lejos de la crítica feroz que anima a tantos. Usted que era amigo de fiestas y carnavales, que era el polo de atracción en las reuniones, entró en una etapa de reflexión para huir de la superficialidad que se pega como un virus. Pero está a punto de salir corriendo detrás de ese amor ardiente que le hace señas, como avisos de neón. Una vela blanca durante los siete días de la semana.");
        this.signos.put("ACUARIO", acuario);

        SignoZodiacal piscis = new SignoZodiacal("PISCIS",
                "Independiente de la situación Nacional que es reflejo de la Internacional como dicen los economistas, su gusto por la buena vida le impide seguir las reglas frugales del ahorro, convencido de que no llegará la época de las vacas flacas. De acuerdo con el tres de oros del Tarot, es preciso aterrizar. De no ser así, los proyectos tan interesantes que tiene en la cabeza abortarán por cuenta de su despilfarro. Está en sus manos. Velas verdes, muchas velas verdes.");
        this.signos.put("PISCIS", piscis);

        SignoZodiacal aries = new SignoZodiacal("ARIES",
                "Se esfuerza por rescatar su relación amorosa de la rutina; le parecen desabridos los abrazos mecánicos y rápidos, propios de un lunes por la mañana. Sus esfuerzos se concentran en oír a su pareja, poner sus cualidades en primer lugar y tolerar sus defectos, sin hacer las veces de juez. También se inventa planes gozosos que celebren la vida, más allá de las desalentadoras noticias Nacionales. Pero la cuestión es que usted solo no puede; necesita que su pareja le ayude. Velas rosadas, muchas velas rosadas.");
        this.signos.put("ARIES", aries);

        SignoZodiacal tauro = new SignoZodiacal("TAURO",
                "Desamarra nudos con el propósito de encontrar salidas para no quedarse en lamentaciones; las detesta. Algunos —a quienes no contradice— piensan que le queda fácil ser optimista pues tiene todo bajo control; consideran que su condición privilegiada lo aleja de las personas que gritan sus miserias en los caminos. Y sus críticos se equivocan. Precisamente por haber superado problemas graves es voz autorizada. Usted da fe de que hay luz al final del túnel. Velas de todos los colores, muchísimas velas de todos los colores.");
        this.signos.put("TAURO", tauro);

        SignoZodiacal geminis = new SignoZodiacal("GEMINIS",
                "Llegan los logros; tiene derecho a pegar un grito de júbilo. Ganó su perseverancia; se pregunta cómo sería si les hubiera hecho caso a quienes le aconsejaron olvidarse de sus iniciativas difíciles. Ganó su convicción de que estaba en lo cierto; se pregunta cómo sería si les hubiera hecho caso a quienes trataron de disuadirlo de sus proyectos con mañas y manipulaciones. Y ganó su transparencia; se pregunta cómo sería si hubiera seguido la regla Nacional del ‘todo vale’ que legitima trampas, zancadillas y el deshonor. Velas rojas, muchísimas velas rojas.");
        this.signos.put("GEMINIS", geminis);

        SignoZodiacal cancer = new SignoZodiacal("CANCER",
                "Si algunos le dicen que una de las causas de su malestar es el estrés usted los mira por encima del hombro pues esta palabra no le dice nada. Tendría que reconocer que su hipersensibilidad, su intolerancia al punto de considerar que la mayoría de las personas son tontas, su demora que se vuelve eternidad para tomar decisiones leves y graves y su resolución de guardar sus proyectos en secreto, convencido de que no los entiende nadie, prueban que sufre de estrés. Velas de todos los colores, muchísimas velas de todos los colores.");
        this.signos.put("CANCER", cancer);

        SignoZodiacal leo = new SignoZodiacal("LEO",
                "Decidió tomar distancia de situaciones que no sabe cómo resolver; lo pensó cuidadosamente pues no quiere esconder la cabeza en un hueco. Sintió que el aire debía correr para refrescar sus ideas, controlar sus impulsos y buscar soluciones objetivas. Y en eso está, a pesar de quienes no entienden cómo en lugar de concentrarse en sus proyectos recorre avenidas con espíritu de turista, conversa con sus amigos y hace conjeturas sobre la situación del mundo, mientras se olvida de la propia. Velas rojas, muchísimas velas rojas.");
        this.signos.put("LEO", leo);

        SignoZodiacal virgo = new SignoZodiacal("VIRGO",
                "Aprovechará la calma después de la tempestad. Empezó este año con la fantasía de que sería tranquilo; podría mirar las estrellas dando rienda suelta a su temperamento romántico. Pero los acontecimientos se precipitaron y tuvo que vencer la incertidumbre. Hoy se alegra de estar en forma después de la batalla y de estar vivo para esperar que la luz que llega con el amanecer siga despejando la bruma. Velas de todos los colores, muchísimas velas de todos los colores.");
        this.signos.put("VIRGO", virgo);

        SignoZodiacal libra = new SignoZodiacal("LIBRA",
                "A pesar de que sostiene que superó las situaciones adversas, dando la cara, tendría que reconocer que huyó pensando que sanaría si no volvía a hablar sobre los temas dolorosos, ni volvía a pasar por los sitios conocidos, ni repasaba con los dedos las fotografías de ese viejo amor. Tendría que reconocer que le faltó hablar para sacar sus emociones a la luz y le faltó aceptar que su equilibrio dependía de esa persona que sostenía la otra punta de la cuerda. Velas rosadas, muchísimas velas rosadas.");
        this.signos.put("LIBRA", libra);
        
        SignoZodiacal escorpio = new SignoZodiacal("ESCORPIO",
                "Necesita recurrir al sentido de la justicia para reconocer lo que está bien y que algunos invalidan por razones de ego. Su trabajo es el escenario en donde muchas estrellas se hacen notar con discursos floridos y promesas que no cumplen, dejando a muchos desilusionados por el camino. No es fácil reorientar las cosas pero su respaldo es su experiencia de luchador que concibe la vida como un ascenso continuo hasta llegar a la cima, con el sudor de la frente. Una vela blanca durante los siete días de la semana.");
        this.signos.put("ESCORPIO", escorpio);
        
        SignoZodiacal sagitario = new SignoZodiacal("SAGITARIO",
                "Reorientará las conversaciones con sus amigos en donde hay debate sobre temas económicos, políticos, sociales y en donde todos expresan sus ideas al rojo vivo. Y lo hará para evitar la polarización que siente en su casa, el sitio de las reuniones, como reflejo de la que vive el país. Entre bandos irreconciliables no se puede construir la paz que se necesita con el fin de que las conversaciones entre sus amigos vuelvan a ser el escenario en el que se debatían todos los temas con respeto. Mientras tanto lo mejor es hablar del clima. Velas blancas, muchas velas blancas.");
        this.signos.put("SAGITARIO", sagitario);
    }

    /**
     * Metodo que retorna el signo Zodiacal del Usuario de acuerdo a su fecha de
     * Nacimiento
     *
     * @param fechaNacimiento
     * @return
     */
    public SignoZodiacal buscarSigno(int diaNac, int mesNac) {
        crearSignosZodiaco();
        SignoZodiacal signoEncontrado = null;

        if (diaNac >= 22 && mesNac == 12 || diaNac <= 20 && mesNac == 1) {
            signoEncontrado = this.signos.get("CAPRICORNIO");
        } else if (diaNac >= 21 && mesNac == 1 || diaNac <= 19 && mesNac == 2) {
            signoEncontrado = this.signos.get("ACUARIO");
        } else if (diaNac >= 20 && mesNac == 2 || diaNac <= 20 && mesNac == 3) {
            signoEncontrado = this.signos.get("PISCIS");
        } else if (diaNac >= 21 && mesNac == 3 || diaNac <= 20 && mesNac == 4) {
            signoEncontrado = this.signos.get("ARIES");
        } else if (diaNac >= 21 && mesNac == 4 || diaNac <= 21 && mesNac == 5) {
            signoEncontrado = this.signos.get("TAURO");
        } else if (diaNac >= 22 && mesNac == 5 || diaNac <= 22 && mesNac == 6) {
            signoEncontrado = this.signos.get("GEMINIS");
        } else if (diaNac >= 22 && mesNac == 6 || diaNac <= 22 && mesNac == 7) {
            signoEncontrado = this.signos.get("CANCER");
        } else if (diaNac >= 23 && mesNac == 7 || diaNac <= 22 && mesNac == 8) {
            signoEncontrado = this.signos.get("LEO");
        } else if (diaNac >= 23 && mesNac == 8 || diaNac <= 22 && mesNac == 9) {
            signoEncontrado = this.signos.get("VIRGO");
        } else if (diaNac >= 23 && mesNac == 9 || diaNac <= 22 && mesNac == 10) {
            signoEncontrado = this.signos.get("LIBRA");
        } else if (diaNac >= 23 && mesNac == 10 || diaNac <= 22 && mesNac == 11) {
            signoEncontrado = this.signos.get("ESCORPIO");
        } else if (diaNac >= 23 && mesNac == 11 || diaNac <= 21 && mesNac == 12) {
            signoEncontrado = this.signos.get("SAGITARIO");
        }
        return signoEncontrado;
    }

    /**
     * Calcula la edad de la persona.
     * @param añoNac
     * @return 
     */
    public int calcularEdad(int añoNac, int mesNacn, int diaNac) {
        int años = 0;
        
        Calendar ahoraMismo=Calendar.getInstance();
        int mesActual=(ahoraMismo.get(Calendar.MONTH)+1);
        int diaActual= ahoraMismo.get(Calendar.DATE);
        años=(ahoraMismo.get(Calendar.YEAR)-añoNac);
        
        if(mesNacn>mesActual || (mesActual==mesNacn && diaNac>diaActual)){//Resta 1 año, ya que no ha cumplido años.
            años=años-1;
        }
        else if(mesActual==mesNacn && diaNac <= diaActual){
            años=(ahoraMismo.get(Calendar.YEAR)-añoNac); //Dejo los años calculados, ya que yá cumpló años.
        }
        
        return años;
    }

    public static void main(String args[]) {
        ConversionNombre o = new ConversionNombre();
    }
}
